package org.xp.judgeplatform.service;

import org.xp.judgeplatform.common.PageResult;
import org.xp.judgeplatform.pojo.dto.ProblemSetDTO.*;
import org.xp.judgeplatform.pojo.vo.ProblemSetVO.InviteCodeVO;
import org.xp.judgeplatform.pojo.vo.ProblemSetVO.ProblemSetMemberVO;
import org.xp.judgeplatform.pojo.vo.ProblemSetVO.ProblemSetVO;

public interface ProblemSetService {

    /**
     * 创建题目集
     */
    ProblemSetVO createProblemSet(ProblemSetCreateDTO createDTO, Integer userId);

    /**
     * 获取题目集列表
     */
    PageResult<ProblemSetVO> getProblemSetList(ProblemSetQueryDTO queryDTO, Integer userId);

    /**
     * 管理员获取题目集列表
     */
    PageResult<ProblemSetVO> getProblemSetListForAdmin(ProblemSetQueryDTO queryDTO);

    /**
     * 获取题目集详情
     */
    ProblemSetVO getProblemSetDetail(Long setId, Integer userId);

    /**
     * 通过邀请码加入题目集
     */
    void joinProblemSet(ProblemSetJoinDTO joinDTO, Integer userId);

    /**
     * 获取题目集成员列表
     */
    PageResult<ProblemSetMemberVO> getMembers(Long setId, Integer pageNum, Integer pageSize, Integer userId);

    /**
     * 更新题目集
     */
    ProblemSetVO updateProblemSet(Long setId, ProblemSetUpdateDTO updateDTO, Integer userId);

    /**
     * 删除题目集
     */
    void deleteProblemSet(Long setId, Integer userId);

    /**
     * 生成邀请码（支持永久和临时）
     */
    InviteCodeVO generateInviteCode(Long setId, InviteCodeDTO dto, Integer userId);

    /**
     * 为题目集添加题目
     */
    void addProblemToSet(Long setId, ProblemSetAddItemDTO addItemDTO, Integer userId);
}
